import { IntersectionType } from '@nestjs/swagger';
import {
  IsEmail,
  IsMobilePhone,
  IsNotEmpty,
  IsOptional,
  IsStrongPassword,
  MaxLength,
} from 'class-validator';
import { ExtraModelDto } from 'src/dtos/extra-model.dto';

export class RegisterDto {
  /**
   * 注册用户名
   * @example 'root'
   */
  @IsNotEmpty({ message: '用户名必填' })
  username: string;

  /**
   * 注册密码
   * @example 'root'
   */
  @IsNotEmpty({ message: '密码必填' })
  @MaxLength(20, { message: '密码长度太长' })
  @IsStrongPassword(
    /**
     * minLength: 密码的最小长度（默认值：8）。
     * minLowercase: 最少的小写字母数量（默认值：1）。
     * minUppercase: 最少的大写字母数量（默认值：1）。
     * minNumbers: 最少的数字数量（默认值：1）。
     * minSymbols: 最少的符号数量（默认值：1）。
     */
    {
      minLength: 8,
      minLowercase: 1,
      minUppercase: 1,
      minNumbers: 1,
      minSymbols: 1,
    },
    { message: '密码格式错误' },
  )
  password: string;

  /**
   * 手机号码
   * @example '13964784210'
   */
  @IsNotEmpty()
  @IsMobilePhone('zh-CN', {}, { message: '手机号码格式错误' })
  mobile: string;

  /**
   * 注册邮箱
   * @example 'lewo@github.com'
   */
  @IsEmail({}, { message: '邮箱格式错误' })
  @IsOptional()
  email?: string;

  /**
   * 用户分类: 0-管理员,1-普通用户
   */
  @IsOptional()
  type?: number = 0;
}

export class RegisterResponseDto extends IntersectionType(
  RegisterDto,
  ExtraModelDto,
) {}
